package com.sztz.handle;

import lombok.NoArgsConstructor;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;

import java.util.ArrayList;
import java.util.List;

/**
 * 流式查询处理器
 * @author yzy
 * @date 2022/5/28 17:01
 */
@NoArgsConstructor
public abstract class AbstractResultHandler<T> implements ResultHandler<T> {
    /**
     * 每一批次处理数据量，默认150
     */
    protected int batchSize = 150;
    /**
     * 获取到的数据
     */
    protected List<T> dataList = new ArrayList();
    /**
     * Mybatis流式数据处理
     * @author yzy
     * @date 2022/5/28 23:45
     */
    @Override
    public void handleResult(ResultContext<? extends T> resultContext) {
        T resultObject = resultContext.getResultObject();
        dataList.add(resultObject);
        if(dataList.size()>batchSize){
            handle();
        }
    }
    /**
     * 最后批次数据处理
     * @author yzy
     * @date 2022/5/28 23:31
     */
    public void lastRowHandle(){
        handle();
    }
    /**
     * 抽象方法，由子类实现具体的数据处理逻辑
     * @author yzy
     * @date 2022/5/28 17:07
     */
    protected abstract void handle();
    /**
     * 设置每批次处理的数量
     * @param batchSize int数量
     * @author yzy
     * @date 2022/5/28 17:05
     */
    protected void setBatchSize(int batchSize){
        //如设为负数，则使用默认值
        if(batchSize<0){
            return;
        }
        this.batchSize = batchSize;
    }
}
